package cn.itcast.web.controller.system;

import cn.itcast.common.utils.Encrypt;
import cn.itcast.common.utils.MailUtil;
import cn.itcast.domain.system.Dept;
import cn.itcast.domain.system.Role;
import cn.itcast.domain.system.User;
import cn.itcast.service.system.DeptService;
import cn.itcast.service.system.RoleService;
import cn.itcast.service.system.UserService;
import cn.itcast.web.controller.BaseController;
import cn.itcast.web.mq.MailProducer;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
@RequestMapping("/system/user")
public class UserController extends BaseController {

	@Autowired
	private UserService userService;

	@Autowired
	private DeptService deptService;

	@Autowired
	private RoleService roleService;

	@Autowired
	private MailProducer mailProducer;

	/**
	 * 分页
	 */
	@RequestMapping(value = "/list",name = "分页查询用户列表")
	public String list(@RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "5")int size) {
		//调用service查询分页数据
		PageInfo info = userService.findAll(page, size, getLoginCompanyId());
		request.setAttribute("page",info);

		//调用service记录日志
		return "system/user/user-list";
	}


	/**
	 * 进入保存页面
	 *  1.查询所有部门
	 *  2.跳转到页面
	 */
	@RequestMapping(value = "/toAdd",name = "进入保存用户页面")
	public String toAdd() {
		List list = deptService.findAll(getLoginCompanyId());//
		request.setAttribute("deptList",list);

		//调用service记录日志
		return  "system/user/user-add";
	}

	@RequestMapping(value = "/toUpdate" ,name = "进入修改用户页面" )
	public String toUpdate(String id) {
		//1.根据id查询用户，页面回显
		User user = userService.findById(id);
		request.setAttribute("user",user);
		//2.构造下拉框数据，查询所有部门
		List list = deptService.findAll(getLoginCompanyId());
		request.setAttribute("deptList",list);
		//调用service记录日志
		return  "system/user/user-update";
	}

	/**
	 * 保存或者修改
	 */
	@RequestMapping(value = "/edit",name = "保存或者修改用户")
	public String edit(User user) throws Exception {
		//1.设置企业属性
		user.setCompanyId(getLoginCompanyId());
		user.setCompanyName(getLoginCompanyName());
		//2.判断是否具有id
		if (StringUtils.isEmpty(user.getId())) {
			//对用户密码加密
			String password = user.getPassword();
			user.setPassword(Encrypt.md5(user.getPassword(),user.getEmail()));
			//3.没有id，调用service保存
			userService.save(user);
			String to = user.getEmail();
			String subject= "欢迎使用SaaSExport货代平台";
			String content= "尊敬的用户："+user.getUserName()+"你好：saas系统的访问地址是 http://127.0.0.1:8088/ ,您的登录用户名："+to+
					",您的访问密码"+password;
			Map map = new HashMap<>();
			map.put("to",to);
			map.put("subject",subject);
			map.put("content",content);
			mailProducer.sendMag(map);
		}else {
			//4.存在id，调用service更新
			userService.update(user);
		}
		//5.重定向到列表
		return  "redirect:/system/user/list.do";
	}

	@RequestMapping(value = "/delete",name = "删除用户")
	public String delete(String id) {
		userService.delete(id);
		return  "redirect:/system/user/list.do";
	}


	/**
	 * 进入到分配角色的页面
	 *  参数：用户id
	 *  业务：
	 *      根据id查询用户
	 *      查询所有的角色
	 *      回显用户已经具有的角色数据
	 *      跳转页面
	 */
	@RequestMapping("/roleList")
	public String roleList(String id) {
		//根据id查询用户
		User user = userService.findById(id);
		request.setAttribute("user",user);
		//查询所有的角色
		List list = roleService.findAll(getLoginCompanyId());
		request.setAttribute("roleList",list);
		//根据用户id查询用户所具有的所有角色
		List<Role> userRoles = roleService.findByUserId(id);
		String userRoleStr="";
		for (Role userRole : userRoles) {
			userRoleStr += userRole.getId()+",";
		}
		request.setAttribute("userRoleStr",userRoleStr);
		//跳转页面
		return  "system/user/user-role";
	}


	/**
	 * 分配角色
	 *  参数：
	 *      用户id ： userid
	 *      角色id数组： roleIds
	 *  业务：
	 *      调用service（在service中完成中间表的操作）
	 */
	@RequestMapping("/changeRole")
	public String changeRole(String userid,String roleIds[]) {
		roleService.changeRole(userid,roleIds);
		return  "redirect:/system/user/list.do";
	}

}
